]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
build: Support the meson build system
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 25 May 2017 00:16:27 +0000 (02:16 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 19 Jul 2017 22:20:54 +0000 (00:20 +0200)
Meson is on track to replace autotools as the build system of choice,
so support it in addition to autotools. If all goes well, we'll
eventually be able to drop the latter ...

https://bugzilla.gnome.org/show_bug.cgi?id=783229

27 files changed:
browser-plugin/meson.build [new file with mode: 0644]
config.h.meson [new file with mode: 0644]
data/meson.build [new file with mode: 0644]
data/theme/meson.build [new file with mode: 0644]
data/theme/parse-sass.sh
docs/reference/meson.build [new file with mode: 0644]
docs/reference/shell/meson.build [new file with mode: 0644]
docs/reference/shell/shell-docs.sgml
docs/reference/st/meson.build [new file with mode: 0644]
docs/reference/st/st-docs.sgml
js/meson.build [new file with mode: 0644]
js/misc/meson.build [new file with mode: 0644]
man/meson.build [new file with mode: 0644]
meson.build [new file with mode: 0644]
meson_options.txt [new file with mode: 0644]
po/meson.build [new file with mode: 0644]
src/calendar-server/meson.build [new file with mode: 0644]
src/gnome-shell-extension-tool.in [changed mode: 0644->0755]
src/gnome-shell-perf-tool.in [changed mode: 0644->0755]
src/hotplug-sniffer/meson.build [new file with mode: 0644]
src/meson.build [new file with mode: 0644]
src/st/meson.build [new file with mode: 0644]
src/st/st.h.in [new file with mode: 0644]
src/tray/meson.build [new file with mode: 0644]
subprojects/gvc
tests/meson.build [new file with mode: 0644]
tests/run-test.sh.in

diff --git a/browser-plugin/meson.build b/browser-plugin/meson.build
new file mode 100644 (file)
index 0000000..d791883
--- /dev/null
@@ -0,0 +1,19 @@
+plugin_sources = [
+  'browser-plugin.c',
+  'npapi/npapi.h',
+  'npapi/npfunctions.h',
+  'npapi/npruntime.h',
+  'npapi/nptypes.h'
+]
+
+shared_module('gnome-shell-browser-plugin', plugin_sources,
+  dependencies: [gio_dep, json_glib_dep],
+  c_args: ['-DG_LOG_DOMAIN="GnomeShellBrowserPlugin"'],
+  # Browsers can unload and reload the module while browsing, which is not
+  # supported by GObject.
+  # We pass -Wl,-z,nodelete to the linker to ensure the module is never
+  # unloaded. See https://bugzilla.gnome.org/show_bug.cgi?id=737932.
+  link_args: ['-Wl,-z,nodelete'],
+  install: true,
+  install_dir: plugindir
+)
diff --git a/config.h.meson b/config.h.meson
new file mode 100644 (file)
index 0000000..10cadf9
--- /dev/null
@@ -0,0 +1,26 @@
+/* The prefix for our gettext translation domains. */
+#mesondefine GETTEXT_PACKAGE
+
+/* Version number of package */
+#mesondefine VERSION
+
+/* Version number of package */
+#mesondefine PACKAGE_VERSION
+
+/* Define to 1 if you have the `fdwalk' function. */
+#mesondefine HAVE_FDWALK
+
+/* Define to 1 if you have the `mallinfo' function. */
+#mesondefine HAVE_MALLINFO
+
+/* Define to 1 fi you have the <sys/resource.h> header file. */
+#mesondefine HAVE_SYS_RESOURCE_H
+
+/* Define if we have NetworkManager */
+#mesondefine HAVE_NETWORKMANAGER
+
+/* Define if we have systemd */
+#mesondefine HAVE_SYSTEMD
+
+/* Define if _NL_TIME_FIRST_WEEKDATE is available */
+#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
diff --git a/data/meson.build b/data/meson.build
new file mode 100644 (file)
index 0000000..0fa87fb
--- /dev/null
@@ -0,0 +1,87 @@
+desktop_files = [
+  'org.gnome.Shell.desktop',
+  'gnome-shell-extension-prefs.desktop'
+]
+service_files = []
+
+if have_networkmanager
+  desktop_files += 'org.gnome.Shell.PortalHelper.desktop'
+  service_files += 'org.gnome.Shell.PortalHelper.service'
+endif
+
+desktopconf = configuration_data()
+# We substitute in bindir so it works as an autostart
+# file when built in a non-system prefix
+desktopconf.set('bindir', bindir)
+desktopconf.set('VERSION', meson.project_version())
+foreach desktop_file : desktop_files
+  i18n.merge_file('desktop',
+    input: configure_file(
+      input: desktop_file + '.in.in',
+      output: desktop_file + '.in',
+      configuration: desktopconf
+    ),
+    output: desktop_file,
+    po_dir: '../po',
+    install: true,
+    install_dir: desktopdir,
+    type: 'desktop'
+  )
+endforeach
+
+serviceconf = configuration_data()
+serviceconf.set('libexecdir', libexecdir)
+foreach service_file : service_files
+  configure_file(
+    input: service_file + '.in',
+    output: service_file,
+    configuration: serviceconf,
+    install_dir: servicedir
+  )
+endforeach
+
+
+dbus_interfaces = [
+  'org.gnome.Shell.PadOsd.xml',
+  'org.gnome.Shell.Screencast.xml',
+  'org.gnome.Shell.Screenshot.xml',
+  'org.gnome.ShellSearchProvider.xml',
+  'org.gnome.ShellSearchProvider2.xml'
+]
+install_data(dbus_interfaces, install_dir: ifacedir)
+
+
+subdir('theme')
+
+theme_resources = gnome.compile_resources(
+  'gnome-shell-theme', 'gnome-shell-theme.gresource.xml',
+  source_dir: 'theme',
+  dependencies: theme_deps,
+  gresource_bundle: true,
+  install: true,
+  install_dir: pkgdatadir
+)
+
+perfconf = configuration_data()
+perfconf.set('datadir', datadir)
+configure_file(
+  input: 'perf-background.xml.in',
+  output: 'perf-background.xml',
+  configuration: perfconf,
+  install_dir: pkgdatadir
+)
+
+
+install_data('50-gnome-shell-system.xml', install_dir: keysdir)
+
+
+schemaconf = configuration_data()
+schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
+configure_file(
+  input: 'org.gnome.shell.gschema.xml.in',
+  output: 'org.gnome.shell.gschema.xml',
+  configuration: schemaconf,
+  install_dir: schemadir
+)
+
+install_data('gnome-shell-overrides.convert', install_dir: convertdir)
diff --git a/data/theme/meson.build b/data/theme/meson.build
new file mode 100644 (file)
index 0000000..ee64e7c
--- /dev/null
@@ -0,0 +1,21 @@
+theme_sources = files([
+  'gnome-shell-high-contrast.scss',
+  'gnome-shell.scss',
+  'gnome-shell-sass/_colors.scss',
+  'gnome-shell-sass/_common.scss',
+  'gnome-shell-sass/_drawing.scss',
+  'gnome-shell-sass/_high-contrast-colors.scss'
+])
+
+theme_deps = []
+
+if sassc.found()
+  parse_sass = files('parse-sass.sh')
+
+  theme_deps += custom_target('update-theme',
+    output: 'theme-update.stamp',
+    depend_files: theme_sources,
+    command: [parse_sass, '@OUTPUT@'],
+    build_by_default: true
+  )
+endif
index eca547eeef64ccbad4109f25a8670ffc7cce8c76..0858655eafa833798673b341b4c993dfa48ac4a5 100755 (executable)
@@ -1,7 +1,10 @@
 #!/usr/bin/sh
 
 srcdir=`dirname $0`
+stamp=${1}
 for scss in $srcdir/*.scss
 do
-  sassc -a $scss ${scss%%.scss}.css
+  sassc -a $scss ${scss%%.scss}.css || exit 1
 done
+
+[ "$stamp" ] && touch $stamp
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
new file mode 100644 (file)
index 0000000..77d9fde
--- /dev/null
@@ -0,0 +1,5 @@
+version_conf = configuration_data()
+version_conf.set('VERSION', meson.project_version())
+
+subdir('shell')
+subdir('st')
diff --git a/docs/reference/shell/meson.build b/docs/reference/shell/meson.build
new file mode 100644 (file)
index 0000000..1469ed4
--- /dev/null
@@ -0,0 +1,57 @@
+private_headers = [
+  'gactionmuxer.h',
+  'gactionobservable.h',
+  'gactionobserver.h',
+  'shell-network-agent.h',
+  'shell-recorder-src.h'
+]
+
+if not enable_recorder
+  private_headers += 'shell-recorder.h'
+endif
+
+exclude_directories = [
+  'calendar-server',
+  'hotplug-sniffer',
+  'st',
+  'tray'
+]
+
+ifaces = [
+  ['org.gnome.Shell.Screenshot', 'org.gnome.Shell.Screenshot.xml'],
+  ['org.gnome.ShellSearchProvider', 'org.gnome.Shell.SearchProvider.xml'],
+  ['org.gnome.ShellSearchProvider2', 'org.gnome.Shell.SearchProvider2.xml']
+]
+foreach iface : ifaces
+  custom_target(iface[0] + ' docs',
+    input: '../../../data/@0@.xml'.format(iface[0]),
+    output: 'doc-gen-' + iface[1],
+    command: [
+      'gdbus-codegen',
+      '--interface-prefix=@0@.'.format(iface),
+      '--generate-docbook', 'doc-gen',
+      '--output-directory', '@OUTDIR@',
+      '@INPUT@'
+    ],
+    build_by_default: true
+  )
+endforeach
+
+configure_file(
+  input: 'version.xml.in',
+  output: 'version.xml',
+  configuration: version_conf
+)
+
+gnome.gtkdoc('shell',
+  main_sgml: 'shell-docs.sgml',
+  src_dir: [
+    join_paths(meson.source_root(), 'src'),
+    join_paths(meson.build_root(), 'src')
+  ],
+  scan_args: [
+    '--ignore-headers=' + ' '.join(private_headers + exclude_directories),
+    '--rebuild-types'
+  ],
+  install: true
+)
index c349f84a59b8ec69ce0381c32d92b2cc59b7aa8f..9e6ae4e15fcc1a4c83a5d9796f1bad4022fdd985 100644 (file)
     <xi:include href="xml/shell-mount-operation.xml"/>
     <xi:include href="xml/shell-polkit-authentication-agent.xml"/>
   </chapter>
+  <!-- FIXME:
+       Not generated at the moment, find out whether to blame gtk-doc or meson
+  -->
+  <!--
   <chapter id="object-tree">
     <title>Object Hierarchy</title>
      <xi:include href="xml/tree_index.sgml"/>
   </chapter>
+  -->
   <index id="api-index-full">
     <title>API Index</title>
     <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
diff --git a/docs/reference/st/meson.build b/docs/reference/st/meson.build
new file mode 100644 (file)
index 0000000..fe89b53
--- /dev/null
@@ -0,0 +1,24 @@
+private_headers = [
+  'st-private.h',
+  'st-theme-node-private.h'
+]
+
+configure_file(
+  input: 'version.xml.in',
+  output: 'version.xml',
+  configuration: version_conf
+)
+
+gnome.gtkdoc('st',
+  main_sgml: 'st-docs.sgml',
+  src_dir: [
+    join_paths(meson.source_root(), 'src', 'st'),
+    join_paths(meson.build_root(), 'src', 'st')
+  ],
+  scan_args: [
+    '--ignore-headers=' + ' '.join(private_headers),
+    '--rebuild-sections',
+    '--rebuild-types'
+  ],
+  install: true
+)
index 788c20460c70d47bbea662c03e5d25380817d6e2..be4cec249ef0d8c8ea83a77ebb50ef9ebc41a7ab 100644 (file)
       <xi:include href="xml/st-texture-cache.xml"/>
     </chapter>
   </part>
+  <!-- FIXME:
+       Not generated at the moment, find out whether to blame gtk-doc or meson
+  -->
+  <!--
   <chapter id="object-tree">
     <title>Object Hierarchy</title>
      <xi:include href="xml/tree_index.sgml"/>
   </chapter>
+  -->
   <index id="api-index-full">
     <title>API Index</title>
     <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
diff --git a/js/meson.build b/js/meson.build
new file mode 100644 (file)
index 0000000..dd8ca3f
--- /dev/null
@@ -0,0 +1,8 @@
+subdir('misc')
+
+js_resources = gnome.compile_resources(
+  'js-resources', 'js-resources.gresource.xml',
+  source_dir: ['.', meson.current_build_dir()],
+  c_name: 'shell_js_resources',
+  dependencies: [config_js]
+)
diff --git a/js/misc/meson.build b/js/misc/meson.build
new file mode 100644 (file)
index 0000000..2048949
--- /dev/null
@@ -0,0 +1,16 @@
+jsconf = configuration_data()
+jsconf.set('PACKAGE_NAME', meson.project_name())
+jsconf.set('PACKAGE_VERSION', meson.project_version())
+jsconf.set('GETTEXT_PACKAGE', meson.project_name())
+jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
+jsconf.set10('HAVE_BLUETOOTH', bt_dep.found())
+jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
+jsconf.set('datadir', datadir)
+jsconf.set('libexecdir', libexecdir)
+jsconf.set('sysconfdir', sysconfdir)
+
+config_js = configure_file(
+  input: 'config.js.in',
+  output: 'config.js',
+  configuration: jsconf
+)
diff --git a/man/meson.build b/man/meson.build
new file mode 100644 (file)
index 0000000..9d39a38
--- /dev/null
@@ -0,0 +1,19 @@
+custom_target('man page',
+  input: 'gnome-shell.xml',
+  output: 'gnome-shell.1',
+  command: [
+    xsltproc,
+    '-o', '@OUTPUT@',
+    '--nonet',
+    '--stringparam', 'man.output.quietly', '1',
+    '--stringparam', 'funcsynopsis.style', 'ansi',
+    '--stringparam', 'man.th.extra1.suppress', '1',
+    '--stringparam', 'man.authors.section.enabled', '0',
+    '--stringparam', 'man.copyright.section.enabled', '0',
+    'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+    '@INPUT@'
+  ],
+  build_by_default: true,
+  install_dir: mandir + '/man1',
+  install: true
+)
diff --git a/meson.build b/meson.build
new file mode 100644 (file)
index 0000000..b8844d7
--- /dev/null
@@ -0,0 +1,208 @@
+project('gnome-shell', 'c',
+  version: '3.25.3',
+  meson_version: '>= 0.41.0',
+  license: 'GPLv2+'
+)
+
+# We depend on a specific version of the libmutter API. The mutter variants of
+# the Cogl and Clutter libraries also use this API version.
+mutter_api_version = '0'
+
+clutter_pc = 'mutter-clutter-' + mutter_api_version
+cogl_pc = 'mutter-cogl-' + mutter_api_version
+cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
+libmutter_pc = 'libmutter-' + mutter_api_version
+
+croco_req = '>= 0.6.8'
+ecal_req = '>= 3.5.3'
+eds_req = '>= 3.17.2'
+gcr_req = '>= 3.7.5'
+gdesktop_req = '>= 3.7.90'
+gio_req = '>= 2.53.0'
+gi_req = '>= 1.49.1'
+gjs_req = '>= 1.47.0'
+gtk_req = '>= 3.15.0'
+json_glib_req = '>= 0.13.2'
+mutter_req = '>= 3.25.2'
+polkit_req = '>= 0.100'
+schemas_req = '>= 3.21.3'
+startup_req = '>= 0.11'
+
+bt_req = '>= 3.9.0'
+gst_req = '>= 0.11.92'
+nm_req = '>= 0.9.8'
+secret_req = '>= 0.18'
+
+gnome = import('gnome')
+i18n  = import('i18n')
+
+prefix = get_option('prefix')
+
+bindir = join_paths(prefix, get_option('bindir'))
+datadir = join_paths(prefix, get_option('datadir'))
+libdir = join_paths(prefix, get_option('libdir'))
+libexecdir = join_paths(prefix, get_option('libexecdir'))
+mandir = join_paths(prefix, get_option('mandir'))
+sysconfdir = join_paths(prefix, get_option('sysconfdir'))
+
+pkgdatadir = join_paths(datadir, meson.project_name())
+pkglibdir = join_paths(libdir, meson.project_name())
+
+convertdir = join_paths(datadir, 'GConf', 'gsettings')
+desktopdir = join_paths(datadir, 'applications')
+ifacedir = join_paths(datadir, 'dbus-1', 'interfaces')
+localedir = join_paths(datadir, 'locale')
+mozplugindir = join_paths(libdir, 'mozilla', 'plugins')
+schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
+servicedir = join_paths(datadir, 'dbus-1', 'services')
+
+plugindir = get_variable('BROWSER_PLUGIN_DIR', mozplugindir)
+
+keybindings_dep = dependency('gnome-keybindings', required: false)
+if keybindings_dep.found()
+  keysdir = keybindings_dep.get_pkgconfig_variable('keysdir')
+else
+  keysdir = join_paths(datadir, 'gnome-control-center', 'keybindings')
+endif
+
+atk_bridge_dep = dependency('atk-bridge-2.0')
+canberra_dep = dependency('libcanberra')
+canberra_gtk_dep = dependency('libcanberra-gtk3')
+ecal_dep = dependency('libecal-1.2', version: ecal_req)
+eds_dep = dependency('libedataserver-1.2', version: eds_req)
+gcr_dep = dependency('gcr-base-3', version: gcr_req)
+gdk_x11_dep = dependency('gdk-x11-3.0')
+gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
+gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
+gio_dep = dependency('gio-2.0', version: gio_req)
+gio_unix_dep = dependency('gio-unix-2.0', version: gio_req)
+gjs_dep = dependency('gjs-1.0', version: gjs_req)
+gtk_dep = dependency('gtk+-3.0', version: gtk_req)
+libxml_dep = dependency('libxml-2.0')
+croco_dep = dependency('libcroco-0.6', version: croco_req)
+clutter_dep = dependency(clutter_pc, version: mutter_req)
+cogl_dep = dependency(cogl_pc, version: mutter_req)
+cogl_pango_dep = dependency(cogl_pango_pc, version: mutter_req)
+mutter_dep = dependency(libmutter_pc, version: mutter_req)
+polkit_dep = dependency('polkit-agent-1', version: polkit_req)
+soup_dep = dependency('libsoup-2.4')
+startup_dep = dependency('libstartup-notification-1.0', version: startup_req)
+x11_dep = dependency('x11')
+schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
+
+bt_dep = dependency('gnome-bluetooth-1.0', version: bt_req, required: false)
+gst_dep = dependency('gstreamer-1.0', version: gst_req, required: false)
+gst_base_dep = dependency('gstreamer-base-1.0', required: false)
+
+recorder_deps = []
+enable_recorder = gst_dep.found() and gst_base_dep.found()
+if enable_recorder
+  recorder_deps += [gst_dep, gst_base_dep, gtk_dep, x11_dep]
+endif
+
+nm_deps = []
+enable_networkmanager = get_option('enable-networkmanager')
+if enable_networkmanager != 'no'
+  want_networkmanager = enable_networkmanager == 'yes'
+
+  nm_deps += dependency('libnm-glib',
+    version: nm_req, required: want_networkmanager
+  )
+  nm_deps += dependency('libnm-util',
+    version: nm_req, required: want_networkmanager
+  )
+  nm_deps += dependency('libnm-gtk',
+    version: nm_req, required: want_networkmanager
+  )
+  nm_deps += dependency('libsecret-1',
+    version: secret_req, required: want_networkmanager
+  )
+
+  have_networkmanager = true
+  foreach dep : nm_deps
+    have_networkmanager = have_networkmanager and dep.found()
+  endforeach
+
+  if not have_networkmanager
+    nm_deps = []
+  endif
+else
+  have_networkmanager = false
+endif
+
+enable_systemd = get_option('enable-systemd')
+if enable_systemd != 'no'
+  want_systemd = enable_systemd == 'yes'
+  systemd_dep = dependency('libsystemd', required: want_systemd)
+  have_systemd = systemd_dep.found()
+else
+  systemd_dep = []
+  have_systemd = false
+endif
+
+enable_plugin = get_option('enable-browser-plugin')
+if enable_plugin
+  json_glib_dep = dependency('json-glib-1.0', version: json_glib_req)
+
+  subdir('browser-plugin')
+endif
+
+enable_man = get_option('enable-man')
+if enable_man
+  xsltproc = find_program('xsltproc')
+
+  subdir('man')
+endif
+
+mutter_typelibdir = mutter_dep.get_pkgconfig_variable('typelibdir')
+python = find_program('python3')
+sassc = find_program('sassc', required: false)
+
+cc = meson.get_compiler('c')
+
+m_dep = cc.find_library('m', required: false)
+
+cdata = configuration_data()
+cdata.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+cdata.set_quoted('VERSION', meson.project_version())
+cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
+
+cdata.set('HAVE_NETWORKMANAGER', have_networkmanager)
+cdata.set('HAVE_SYSTEMD', have_systemd)
+
+cdata.set('HAVE_FDWALK', cc.has_function('fdwalk'))
+cdata.set('HAVE_MALLINFO', cc.has_function('mallinfo'))
+cdata.set('HAVE_SYS_RESOURCE_H', cc.has_header('sys/resource.h'))
+cdata.set('HAVE__NL_TIME_FIRST_WEEKDAY',
+  cc.has_header_symbol('langinfo.h', '_NL_TIME_FIRST_WEEKDAY')
+)
+
+config_h = configure_file(
+  input: 'config.h.meson',
+  output: 'config.h',
+  configuration: cdata
+)
+
+conf_inc = include_directories('.')
+
+libgvc = subproject('gvc',
+  default_options: [
+    'package-name=' + meson.project_name(),
+    'package-version=' + meson.project_version(),
+    'pkgdatadir=' + pkgdatadir,
+    'pkglibdir=' + pkglibdir,
+    'static=false',
+    'with-introspection=true'
+  ]
+)
+libgvc_gir = libgvc.get_variable('libgvc_gir')
+
+subdir('js')
+subdir('src')
+subdir('po')
+subdir('data')
+subdir('tests')
+
+if get_option('enable-documentation')
+  subdir('docs/reference')
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644 (file)
index 0000000..18899ff
--- /dev/null
@@ -0,0 +1,31 @@
+option('enable-browser-plugin',
+  type: 'boolean',
+  value: true,
+  description: 'Enable extensions.gnome.org browser plugin'
+)
+
+option('enable-documentation',
+  type: 'boolean',
+  value: false,
+  description: 'Build API reference'
+)
+
+option('enable-man',
+  type: 'boolean',
+  value: true,
+  description: 'Generate man pages'
+)
+
+option('enable-networkmanager',
+  type: 'combo',
+  choices: ['yes', 'no', 'auto'],
+  value: 'auto',
+  description: 'Enable NetworkManager support'
+)
+
+option('enable-systemd',
+  type: 'combo',
+  choices: ['yes', 'no', 'auto'],
+  value: 'auto',
+  description: 'Enable systemd integration'
+)
diff --git a/po/meson.build b/po/meson.build
new file mode 100644 (file)
index 0000000..e9b77d7
--- /dev/null
@@ -0,0 +1 @@
+i18n.gettext(meson.project_name(), preset: 'glib')
diff --git a/src/calendar-server/meson.build b/src/calendar-server/meson.build
new file mode 100644 (file)
index 0000000..a7393fc
--- /dev/null
@@ -0,0 +1,37 @@
+calendar_sources = [
+  'gnome-shell-calendar-server.c',
+  'calendar-debug.h',
+  'calendar-sources.c',
+  'calendar-sources.h'
+]
+
+calendar_server = executable('gnome-shell-calendar-server', calendar_sources,
+  dependencies: [ecal_dep, eds_dep, gio_dep],
+  include_directories: include_directories('..', '../..'),
+  c_args: [
+    '-DPREFIX="@0@"'.format(prefix),
+    '-DLIBDIR="@0@"'.format(libdir),
+    '-DDATADIR="@0@"'.format(datadir),
+    '-DG_LOG_DOMAIN="ShellCalendarServer"'
+  ],
+  install_dir: libexecdir,
+  install: true
+)
+
+service_file = 'org.gnome.Shell.CalendarServer.service'
+
+configure_file(
+  input: service_file + '.in',
+  output: service_file,
+  configuration: service_data,
+  install_dir: servicedir
+)
+
+i18n.merge_file('evolution-calendar.desktop',
+  input: 'evolution-calendar.desktop.in',
+  output: 'evolution-calendar.desktop',
+  po_dir: '../../po',
+  install: true,
+  install_dir: desktopdir,
+  type: 'desktop'
+)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/src/hotplug-sniffer/meson.build b/src/hotplug-sniffer/meson.build
new file mode 100644 (file)
index 0000000..4a777e5
--- /dev/null
@@ -0,0 +1,22 @@
+hotplug_sources = [
+  'hotplug-mimetypes.h',
+  'shell-mime-sniffer.h',
+  'shell-mime-sniffer.c',
+  'hotplug-sniffer.c'
+]
+
+executable('gnome-shell-hotplug-sniffer', hotplug_sources,
+  dependencies: [gio_dep, gdk_pixbuf_dep],
+  include_directories: include_directories('../..'),
+  install_dir: libexecdir,
+  install: true
+)
+
+service_file = 'org.gnome.Shell.HotplugSniffer.service'
+
+configure_file(
+  input: service_file + '.in',
+  output: service_file,
+  configuration: service_data,
+  install_dir: servicedir
+)
diff --git a/src/meson.build b/src/meson.build
new file mode 100644 (file)
index 0000000..6957a94
--- /dev/null
@@ -0,0 +1,301 @@
+service_data = configuration_data()
+service_data.set('libexecdir', libexecdir)
+
+subdir('calendar-server')
+subdir('hotplug-sniffer')
+subdir('st')
+subdir('tray')
+
+script_data = configuration_data()
+script_data.set('bindir', bindir)
+script_data.set('datadir', datadir)
+script_data.set('libdir', libdir)
+script_data.set('libexecdir', libexecdir)
+script_data.set('pkgdatadir', pkgdatadir)
+script_data.set('pkglibdir', pkglibdir)
+script_data.set('sysconfdir', sysconfdir)
+script_data.set('PYTHON', python.path())
+script_data.set('VERSION', meson.project_version())
+
+foreach tool : ['gnome-shell-extension-tool', 'gnome-shell-perf-tool']
+  configure_file(
+    input: tool + '.in',
+    output: tool,
+    configuration: script_data,
+    install_dir: bindir
+  )
+endforeach
+
+gnome_shell_cflags = [
+  '-DCLUTTER_ENABLE_EXPERIMENTAL_API',
+  '-DCOGL_ENABLE_EXPERIMENTAL_API',
+  '-DVERSION="@0@"'.format(meson.project_version()),
+  '-DLOCALEDIR="@0@"'.format(localedir),
+  '-DDATADIR="@0@"'.format(datadir),
+  '-DGNOME_SHELL_LIBEXECDIR="@0@"'.format(libexecdir),
+  '-DGNOME_SHELL_DATADIR="@0@"'.format(pkgdatadir),
+  '-DGNOME_SHELL_PKGLIBDIR="@0@"'.format(pkglibdir)
+]
+
+rpath_link_args = ['-Wl,-rpath', mutter_typelibdir]
+install_rpath = ':'.join([mutter_typelibdir, pkglibdir])
+
+gnome_shell_deps = [
+  gio_unix_dep,
+  libxml_dep,
+  gtk_dep,
+  atk_bridge_dep,
+  gjs_dep,
+  gdk_x11_dep,
+  soup_dep,
+  clutter_dep,
+  cogl_pango_dep,
+  startup_dep,
+  gi_dep,
+  canberra_dep, canberra_gtk_dep,
+  polkit_dep,
+  gcr_dep,
+  systemd_dep
+]
+
+gnome_shell_deps += nm_deps
+gnome_shell_deps += recorder_deps
+
+libshell_menu_gir_sources = [
+  'gtkactionmuxer.h',
+  'gtkactionmuxer.c',
+  'gtkactionobservable.h',
+  'gtkactionobservable.c',
+  'gtkactionobserver.h',
+  'gtkactionobserver.c',
+  'gtkmenutrackeritem.c',
+  'gtkmenutrackeritem.h'
+]
+
+libshell_menu_no_gir_sources= [
+  'gtkmenutracker.c',
+  'gtkmenutracker.h'
+]
+
+libshell_menu = library('gnome-shell-menu',
+  sources: libshell_menu_gir_sources + libshell_menu_no_gir_sources,
+  dependencies: [gio_dep, clutter_dep],
+  include_directories: conf_inc,
+  link_args: rpath_link_args,
+  install_rpath: mutter_typelibdir,
+  install_dir: pkglibdir,
+  install: true
+)
+
+libshell_menu_gir = gnome.generate_gir(libshell_menu,
+  sources: libshell_menu_gir_sources,
+  nsversion: '0.1',
+  namespace: 'ShellMenu',
+  identifier_prefix: 'Gtk',
+  symbol_prefix: 'gtk',
+  includes: ['Gio-2.0', libst_gir[0]],
+  dependencies: [mutter_dep],
+  extra_args: ['--quiet'],
+  install_dir_gir: pkgdatadir,
+  install_dir_typelib: pkglibdir,
+  install: true
+)
+
+
+libshell_public_headers = [
+  'shell-app.h',
+  'shell-app-system.h',
+  'shell-app-usage.h',
+  'shell-embedded-window.h',
+  'shell-generic-container.h',
+  'shell-glsl-quad.h',
+  'shell-gtk-embed.h',
+  'shell-global.h',
+  'shell-invert-lightness-effect.h',
+  'shell-action-modes.h',
+  'shell-mount-operation.h',
+  'shell-perf-log.h',
+  'shell-screenshot.h',
+  'shell-stack.h',
+  'shell-tray-icon.h',
+  'shell-tray-manager.h',
+  'shell-util.h',
+  'shell-window-tracker.h',
+  'shell-wm.h'
+]
+
+if have_networkmanager
+  libshell_public_headers += 'shell-network-agent.h'
+endif
+
+libshell_private_headers = [
+  'shell-app-private.h',
+  'shell-app-system-private.h',
+  'shell-global-private.h',
+  'shell-window-tracker-private.h',
+  'shell-wm-private.h'
+]
+
+libshell_sources = [
+  'gnome-shell-plugin.c',
+  'shell-app.c',
+  'shell-app-system.c',
+  'shell-app-usage.c',
+  'shell-embedded-window.c',
+  'shell-embedded-window-private.h',
+  'shell-generic-container.c',
+  'shell-global.c',
+  'shell-glsl-quad.c',
+  'shell-gtk-embed.c',
+  'shell-invert-lightness-effect.c',
+  'shell-keyring-prompt.c',
+  'shell-keyring-prompt.h',
+  'shell-menu-tracker.c',
+  'shell-menu-tracker.h',
+  'shell-mount-operation.c',
+  'shell-perf-log.c',
+  'shell-polkit-authentication-agent.c',
+  'shell-polkit-authentication-agent.h',
+  'shell-screenshot.c',
+  'shell-secure-text-buffer.c',
+  'shell-secure-text-buffer.h',
+  'shell-stack.c',
+  'shell-tray-icon.c',
+  'shell-tray-manager.c',
+  'shell-util.c',
+  'shell-window-tracker.c',
+  'shell-wm.c'
+]
+
+if have_networkmanager
+  libshell_sources += 'shell-network-agent.c'
+endif
+
+libshell_private_sources = []
+
+if enable_recorder
+    libshell_sources += ['shell-recorder.c']
+    libshell_public_headers += ['shell-recorder.h']
+
+    libshell_private_sources += ['shell-recorder-src.c']
+    libshell_private_headers += ['shell-recorder-src.h']
+endif
+
+
+libshell_enums = gnome.mkenums('shell-enum-types',
+  sources: libshell_public_headers,
+  c_template: 'shell-enum-types.c.in',
+  h_template: 'shell-enum-types.h.in'
+)
+
+libshell_gir_sources = [
+  libshell_enums,
+  libshell_public_headers,
+  libshell_sources
+]
+
+libshell_no_gir_sources = [
+  js_resources,
+  libshell_private_headers,
+  libshell_private_sources
+]
+
+dbus_generated = gnome.gdbus_codegen('org-gtk-application',
+  'org.gtk.Application.xml',
+  namespace: 'Shell'
+)
+
+libshell_no_gir_sources += dbus_generated
+
+libshell = library('gnome-shell',
+  sources: libshell_gir_sources + libshell_no_gir_sources,
+  dependencies: gnome_shell_deps + [mutter_dep, m_dep],
+  include_directories: [conf_inc, st_inc, include_directories('tray')],
+  c_args: gnome_shell_cflags,
+  link_with: [libshell_menu, libst, libtray],
+  link_args: rpath_link_args,
+  install_rpath: install_rpath,
+  install_dir: pkglibdir,
+  install: true
+)
+
+libshell_gir_includes = [
+  'Clutter-@0@'.format(mutter_api_version),
+  'ClutterX11-@0@'.format(mutter_api_version),
+  'Meta-@0@'.format(mutter_api_version),
+  'Soup-2.4'
+]
+
+if have_networkmanager
+  libshell_gir_includes += ['NetworkManager-1.0', 'NMClient-1.0']
+endif
+
+libshell_gir_includes += [
+  libgvc_gir[0],
+  libshell_menu_gir[0],
+  libst_gir[0]
+]
+
+gnome.generate_gir(libshell,
+  sources: libshell_gir_sources,
+  nsversion: '0.1',
+  namespace: 'Shell',
+  includes: libshell_gir_includes,
+  link_with: [libshell_menu, libst],
+  extra_args: ['--quiet'],
+  install_dir_gir: pkgdatadir,
+  install_dir_typelib: pkglibdir,
+  install: true
+)
+
+executable('gnome-shell', 'main.c',
+  c_args: gnome_shell_cflags + [
+    '-DMUTTER_TYPELIB_DIR="@0@"'.format(mutter_typelibdir)
+  ],
+  dependencies: gnome_shell_deps + [mutter_dep],
+  link_with: libshell,
+  include_directories: [conf_inc, st_inc, include_directories('tray')],
+  link_args: rpath_link_args,
+  install_rpath: install_rpath,
+  install: true
+)
+
+executable('gnome-shell-extension-prefs',
+  'gnome-shell-extension-prefs.c', js_resources,
+  c_args: gnome_shell_cflags,
+  dependencies: gnome_shell_deps,
+  include_directories: [conf_inc],
+  link_args: rpath_link_args,
+  install_rpath: install_rpath,
+  install: true
+)
+
+
+if have_networkmanager
+  executable('gnome-shell-portal-helper',
+    'gnome-shell-portal-helper.c', js_resources,
+    c_args: gnome_shell_cflags,
+    dependencies: gnome_shell_deps,
+    include_directories: [conf_inc],
+    link_args: rpath_link_args,
+    install_rpath: install_rpath,
+    install_dir: libexecdir,
+    install: true
+  )
+endif
+
+executable('gnome-shell-perf-helper', 'shell-perf-helper.c',
+  dependencies: [gtk_dep, gio_dep, m_dep],
+  include_directories: [conf_inc],
+  link_args: rpath_link_args,
+  install_rpath: install_rpath,
+  install_dir: libexecdir,
+  install: true
+)
+
+executable('run-js-test', 'run-js-test.c',
+  dependencies: [mutter_dep, gio_dep, gjs_dep],
+  include_directories: [conf_inc],
+  link_with: libshell,
+  link_args: rpath_link_args
+)
diff --git a/src/st/meson.build b/src/st/meson.build
new file mode 100644 (file)
index 0000000..02064bd
--- /dev/null
@@ -0,0 +1,148 @@
+st_headers = [
+  'st-adjustment.h',
+  'st-bin.h',
+  'st-border-image.h',
+  'st-box-layout.h',
+  'st-box-layout-child.h',
+  'st-button.h',
+  'st-clipboard.h',
+  'st-drawing-area.h',
+  'st-entry.h',
+  'st-focus-manager.h',
+  'st-generic-accessible.h',
+  'st-icon.h',
+  'st-icon-colors.h',
+  'st-im-text.h',
+  'st-label.h',
+  'st-private.h',
+  'st-scrollable.h',
+  'st-scroll-bar.h',
+  'st-scroll-view.h',
+  'st-shadow.h',
+  'st-texture-cache.h',
+  'st-theme.h',
+  'st-theme-context.h',
+  'st-theme-node.h',
+  'st-types.h',
+  'st-widget.h',
+  'st-widget-accessible.h'
+]
+
+st_includes = []
+foreach include : st_headers
+  st_includes += '#include <@0@>'.format(include)
+endforeach
+
+st_h_data = configuration_data()
+st_h_data.set('includes', '\n'.join(st_includes))
+
+st_h = configure_file(
+  input: 'st.h.in',
+  output: 'st.h',
+  configuration: st_h_data
+)
+
+st_inc = include_directories('.', '..')
+
+st_private_headers = [
+  'st-private.h',
+  'st-theme-private.h',
+  'st-theme-node-private.h',
+  'st-theme-node-transition.h'
+]
+
+# please, keep this sorted alphabetically
+st_sources = [
+  'st-adjustment.c',
+  'st-bin.c',
+  'st-border-image.c',
+  'st-box-layout.c',
+  'st-box-layout-child.c',
+  'st-button.c',
+  'st-clipboard.c',
+  'st-drawing-area.c',
+  'st-entry.c',
+  'st-focus-manager.c',
+  'st-generic-accessible.c',
+  'st-icon.c',
+  'st-icon-colors.c',
+  'st-im-text.c',
+  'st-label.c',
+  'st-private.c',
+  'st-scrollable.c',
+  'st-scroll-bar.c',
+  'st-scroll-view.c',
+  'st-shadow.c',
+  'st-texture-cache.c',
+  'st-theme.c',
+  'st-theme-context.c',
+  'st-theme-node.c',
+  'st-theme-node-drawing.c',
+  'st-theme-node-transition.c',
+  'st-widget.c'
+]
+
+st_built_sources = gnome.mkenums('st-enum-types',
+  sources: st_headers,
+  c_template: 'st-enum-types.c.in',
+  h_template: 'st-enum-types.h.in'
+)
+
+st_gir_sources = st_sources + st_private_headers + st_headers + st_built_sources
+
+st_non_gir_sources = [
+  'st-scroll-view-fade.c',
+  'st-scroll-view-fade.h'
+]
+
+data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl')
+
+custom_target('scroll-view-fade-glsl',
+  input: ['st-scroll-view-fade.glsl'],
+  output: ['st-scroll-view-fade-generated.c'],
+  build_by_default: true,
+  capture: true,
+  command: [data_to_c, '@INPUT@', 'st_scroll_view_fade_glsl']
+)
+
+st_cflags = [
+  '-I@0@/src'.format(meson.source_root()),
+  '-I@0@'.format(meson.build_root()),
+  '-DPREFIX="@0@"'.format(prefix),
+  '-DLIBDIR="@0@"'.format(libdir),
+  '-DG_LOG_DOMAIN="St"',
+  '-DST_COMPILATION',
+  '-DCLUTTER_ENABLE_EXPERIMENTAL_API',
+  '-DCOGL_ENABLE_EXPERIMENTAL_API',
+  '-DPACKAGE_DATA_DIR="@0@"'.format(pkgdatadir)
+]
+
+# Currently meson requires a shared library for building girs
+libst = shared_library('st-1.0',
+  sources: st_gir_sources + st_non_gir_sources,
+  c_args: st_cflags,
+  dependencies: [clutter_dep, gtk_dep, croco_dep, x11_dep, m_dep],
+  install_rpath: mutter_typelibdir,
+  install_dir: pkglibdir,
+  install: true
+)
+
+test_theme = executable('test-theme',
+  sources: 'test-theme.c',
+  c_args: st_cflags,
+  dependencies: [clutter_dep, gtk_dep],
+  link_with: libst
+)
+
+libst_gir = gnome.generate_gir(libst,
+  sources: st_gir_sources,
+  nsversion: '1.0',
+  namespace: 'St',
+  includes: ['Clutter-' + mutter_api_version, 'Gtk-3.0'],
+  dependencies: [mutter_dep],
+  include_directories: include_directories('..'),
+  extra_args: ['-DST_COMPILATION', '--quiet'],
+  install_dir_gir: pkgdatadir,
+  install_dir_typelib: pkglibdir,
+  install: true
+)
diff --git a/src/st/st.h.in b/src/st/st.h.in
new file mode 100644 (file)
index 0000000..825c820
--- /dev/null
@@ -0,0 +1,3 @@
+#define ST_H_INSIDE 1
+@includes@
+#undef ST_H_INSIDE
diff --git a/src/tray/meson.build b/src/tray/meson.build
new file mode 100644 (file)
index 0000000..139e3b2
--- /dev/null
@@ -0,0 +1,12 @@
+tray_sources = [
+  'na-tray-child.c',
+  'na-tray-child.h',
+  'na-tray-manager.c',
+  'na-tray-manager.h'
+]
+
+libtray = static_library('tray', tray_sources,
+  c_args: ['-DG_LOG_DOMAIN="notification_area"'],
+  dependencies: [clutter_dep, gtk_dep],
+  include_directories: conf_inc
+)
index ce8e4880ce31e275c40825c4ed756c791107f810..01e1fde6e5cc416d4fe7b1d8a7afb97455210e3a 160000 (submodule)
@@ -1 +1 @@
-Subproject commit ce8e4880ce31e275c40825c4ed756c791107f810
+Subproject commit 01e1fde6e5cc416d4fe7b1d8a7afb97455210e3a
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644 (file)
index 0000000..91f9cda
--- /dev/null
@@ -0,0 +1,8 @@
+testconf = configuration_data()
+testconf.set('MUTTER_TYPELIB_DIR', mutter_typelibdir)
+testconf.set('srcdir', meson.current_source_dir())
+configure_file(
+  input: 'run-test.sh.in',
+  output: 'run-test.sh',
+  configuration: testconf
+)
index 8113091c8b0e2eb39563e27bd9d77072480a5461..71b35aca0f4ea06ded218a0cfac944f5fd7d10ad 100755 (executable)
@@ -30,7 +30,7 @@ builddir=`cd $builddir && pwd`
 srcdir=@srcdir@
 srcdir=`cd $srcdir && pwd`
 
-GI_TYPELIB_PATH="$GI_TYPELIB_PATH${GI_TYPELIB_PATH:+:}@MUTTER_TYPELIB_DIR@:$builddir/../src:$builddir/../subprojects/gvc"
+GI_TYPELIB_PATH="$GI_TYPELIB_PATH${GI_TYPELIB_PATH:+:}@MUTTER_TYPELIB_DIR@:$builddir/../src:$builddir/../src/st:$builddir/../subprojects/gvc"
 GJS_PATH="$srcdir:$srcdir/../js:$builddir/../js"
 GJS_DEBUG_OUTPUT=stderr
 $verbose || GJS_DEBUG_TOPICS="JS ERROR;JS LOG"